#ifndef     __TYPES_H
#define     __TYPES_H

#include <type_traits>
#include "./byte_view.h"
#include "./error.h"

namespace utils {

template <typename T>
inline constexpr bool IS_INT = std::is_same_v<T, uint8_t> 
	|| std::is_same_v<T, uint16_t>
	|| std::is_same_v<T, uint32_t>
	|| std::is_same_v<T, int8_t>
	|| std::is_same_v<T, int16_t> 
	|| std::is_same_v<T, int32_t>
	|| std::is_enum_v<T>
	;

template <typename T>
inline constexpr bool IS_ERROR = std::is_same_v<T, Error>;

template <typename T>
inline constexpr bool IS_BYTE_VIEW = std::is_same_v<T, ByteView>;

template <typename T>
inline constexpr bool IS_CODEC_TYPE = IS_INT<T>	
	|| IS_ERROR<T>
	|| IS_BYTE_VIEW<T>
	;

}

#endif
